package com.baosight.risk.web.xtzy;

import java.util.List;

import javax.ws.rs.core.MediaType;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.baosight.risk.api.xtzy.IXtsqMenuAuthoService;
import com.baosight.risk.base.controller.BaseController;
import com.baosight.risk.common.annotation.Log;
import com.baosight.risk.common.result.AjaxResult;
import com.baosight.risk.common.utils.StringUtils;
import com.baosight.risk.service.system.entity.SysMenu;
import com.baosight.risk.service.xtzy.vo.XtzyCompanyVO;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;

/**
 * 类 名: XtsqMenuAuthoController
 * 描 述:
 * 作 者: 黎秋荣
 * 创 建：2019年05月20日
 * 版 本：v2.2.0
 * 历 史: (版本) 作者 时间 注释
 */
@Slf4j
@RestController
@RequestMapping("/xtzy/menuauth")
@Api(value = "组织角色菜单授权", description = "组织角色菜单授权", produces = MediaType.APPLICATION_JSON)
public class XtsqMenuAuthoController extends BaseController {

    @Autowired
    private IXtsqMenuAuthoService menuAuthoService;

    /**
     * 根据组织ID获取角色
     *
     * @param compId
     * @return
     */
    @GetMapping("queryRole")
    @ApiOperation("根据组织ID获取角色")
    public AjaxResult queryRole(String compId, String roleName, String flag) {
        return getResultPage(menuAuthoService.getRoleByCompId(compId, roleName, flag));
    }

    /**
     * 删除单位下的角色及授权关系
     *
     * @param id
     * @return
     */
    @GetMapping("deleteRoleAuthById")
    @ApiOperation("删除单位下的角色及授权关系")
    public AjaxResult deleteRoleAuthById(String id) throws Exception {
        return success(menuAuthoService.deleteRoleAuthById(id));
    }

    /**
     * 给单位新增角色
     *
     * @param companyVO
     * @return
     */
    @RequestMapping("addRoleByCompCode")
    @ApiOperation("给单位新增角色")
    public AjaxResult addRoleByCompCode(@RequestBody XtzyCompanyVO companyVO) throws Exception {
        if (CollectionUtils.isEmpty(companyVO.getRoleList())) {
            log.error("请至少选择一条角色数据！");
            throw new Exception("请至少选择一条角色数据！");
        }
        return success(menuAuthoService.addRoleByCompCode(companyVO));
    }

    /**
     * 根据组织ID获取本部门及上级公司角色
     *
     * @param compId
     * @return
     */
    @GetMapping("queryRoleByCompId")
    @ApiOperation("根据组织ID获取本部门及上级公司角色")
    public AjaxResult queryRoleByCompId(String compId, String topCompId) {
        return success(menuAuthoService.queryRoleByCompId(compId, topCompId));
    }


    /**
     * 登陆用==根据组织ID和用户信息获取合并菜单
     *
     * @param compId
     * @return
     */
    @PostMapping("getMenuByCompAndUser")
    @ApiOperation("登陆用==根据组织ID和用户信息获取合并菜单")
    public AjaxResult getMenuByCompAndUser(@RequestParam("compId") String compId) {
        startPage();
        return getResultPage(menuAuthoService.getMenuByCompAndUser(compId, getUser()));
    }

    /**
     * 根据组织机构和角色ID获取菜单===非树结构(角色授权使用)
     *
     * @param compId 组织机构
     * @param roleId 角色
     * @return
     */
    @RequestMapping(value = "getMenuByRoleIdAndCompId", method = RequestMethod.GET)
    @ApiOperation("根据组织机构和角色ID获取菜单===非树结构")
    public AjaxResult getMenuByRoleIdAndCompId(String compId, String roleId) {
        List<SysMenu> list = menuAuthoService.getMenuByRoleIdAndCompId(compId, roleId);
        return success(list);
    }

    /**
     * 根据多角色分配菜单
     * 需要传入参数：company、compRoleList、menuList
     *
     * @param companyVO 根据组织和多角色分配菜单
     * @return
     */
    @RequestMapping(value = "inserMenuByRole", method = RequestMethod.POST)
    @Log(title = "根据多角色分配菜单")
    @ApiOperation("根据多角色分配菜单==参数：company、compRoleList、menuList")
    public AjaxResult inserMenuByRole(@RequestBody XtzyCompanyVO companyVO) {
        if (StringUtils.isEmpty(companyVO.getId())) {
            log.error("请选择组织信息！");
            return error("组织信息不能为空！");
        }
        if (CollectionUtils.isEmpty(companyVO.getRoleList()) ||
                CollectionUtils.isEmpty(companyVO.getMenuList())) {
            log.error("信息为空，请至少选择一条信息！");
            return error("信息为空，请至少选择一条信息！");
        }
        return toAjax(menuAuthoService.inserMenuByRole(companyVO));
    }
}
